Repository as a Serviceのpackagecloud.ioを試してみた
ども、大瀧です。
みなさん、yumやapt-getコマンド使っていますか?Linux使いなら必須ですよね。ではgemは?こちらもRuby使いなら必須だと思います。では、自前でそれらのパッケージリポジトリを構築・管理してますか?ギークの方の手がちらほら上がるかもしれませんが、ほとんどの方は「構築が面倒そう」、「設定項目が多くて大変」と言うように敬遠しているのではないでしょうか。しかし、自前でリポジトリを持っているとソフトウェア配布の手段としてとても便利だと思います。そんなパッケージリポジトリを簡単に扱うサービス、packagecloud.ioなるものをTwitterのタイムラインで発見したので、試してみました。
- packagecloud.io : https://packagecloud.io/
packagecloud.ioでできること
Repository as a Serviceとは具体的になにが提供されるのか、簡単にまとめると以下になります。
- リポジトリのホスティング : 各パッケージのリポジトリが提供されます。PublicとPrivateが選択できるので、特定顧客向けなどにも対応でき、yumでいうcreaterepoコマンドのようなリポジトリのメンテナンスもお任せできます。
- コマンドラインツール : パッケージのアップロードおよび公開が簡単にできるコマンドラインツールが提供されます。gemコマンドで簡単にインストールでき、コマンド一発でアップロードとリポジトリのメタデータ更新が走ります!
- リポジトリのリストファイル : リポジトリを登録するリストファイルが提供され、スクリプトで簡単にインストールできます。
見た目としては地味かもしれませんが、従来のパッケージリポジトリ管理ではいずれも手間のかかるところですので、気軽にリポジトリを管理するために必要な機能が揃っていていい感じです。
1. サインアップ
まずは、packagecloud.ioのトップにある[Sign Up]からアカウントを登録します。Usernameは発行されるリポジトリのURLになることに少し注意しつつ、[Sign up!]をクリックします。
続いてプランの選択です。GitHubと似たようなラインアップになっていますね。今回はお試しなのでFreeプランを選択しました。[Continue]をクリックします。
これでサインアップは完了です!続いてリポジトリの作成に続きます。
2. リポジトリの作成
続いて、リポジトリの作成画面が表示されます。リポジトリ名を入力し、[Create It!]でリポジトリが作成されます。リポジトリのURLはhttps://packagecloud.io/ユーザー名/リポジトリ名/になります。
リポジトリへのパッケージのアップロードは、コマンドラインツールのpackage_cloudコマンドを使用します。画面の指示に従い、gemコマンドでインストールします。
ikkomon:~ ryuta$ gem install package_cloud --no-ri --no-rdoc Fetching: colorize-0.6.0.gem (100%) Fetching: package_cloud-0.2.3.gem (100%) Successfully installed colorize-0.6.0 Successfully installed package_cloud-0.2.3 2 gems installed
package_cloudコマンドの初回実行時には、クレデンシャルファイルの作成が促されます。ユーザー名、パスワードを入力すると作成され、リポジトリ一覧が表示されます。
ikkomon:~ ryuta$ package_cloud repository list No config file exists at /Users/ryuta/.packagecloud. Login to create one. Email: takipone@example.com Password: Got your token. Writing a config file to /Users/ryuta/.packagecloud... success! Your repositories: classmethod/rpm (public) last push: never | packages: no packages ikkomon:~ ryuta$
作成したリポジトリが表示されました!これで準備OKです。ブラウザの[Done]ボタンをクリックします。
3. パッケージのアップロード
パッケージのアップロードは、package_cloud push <ユーザー名>/<リポジトリ名> <パッケージファイル名>で実行します。パッケージの拡張子によって、RPM、DEB(aptのパッケージ形式)、GEMが自動で判別され、パッケージごとの設定を選択します。RPMの場合はリポジトリのパスに反映されます。今回はRHEL6向けを選択してみました。
ikkomon:~ ryuta$ package_cloud push classmethod/rpm ./ec2-swap-0.2.0-1.noarch.rpm rpm packages require an operating system and version to be selected. If you don't see your OS or version here, send us an email at support@packagecloud.io: 0. Enterprise Linux 1. Fedora 0-1: 0 You selected Enterprise Linux. Select a version: 0. Enterprise Linux 5.0 (5) 1. Enterprise Linux 6.0 (6) 0-1: 1 Push ./ec2-swap-0.2.0-1.noarch.rpm to classmethod/rpm/el/6? (y/n): y Continuing... Note that next time you can push directly to el/6 by specifying classmethod/rpm/el/6 on the commandline. Looking for repository at classmethod/rpm... success! Pushing temp/repo.classmethod.info/yum/x86_64-test/ec2-swap-0.2.0-1.noarch.rpm... success! ikkomon:~ ryuta$
コマンド一発でアップロードとリポジトリツリーの構成が完了しました!あまりに簡単で、素直に驚きました。ブラウザ画面に戻り、[Done]ボタンで次に進みます。
パッケージ一覧にアップロードしたパッケージが表示されていますね。これでリポジトリの準備は完了です。
4. パッケージのインストール
リポジトリの参照方法は従来と特に変わりません。各パッケージの種類に応じた、リストファイルの配置を行います。上記画面の[Install this Repo]にあるコマンドラインをコピー&ペーストすればリストファイルの配置が一発で実行できます。今回はRPMパッケージをアップロードしましたので、script.rpmのコマンドラインを実行してみます。
[ec2-user@ip-XX-XX-XX-XX ~]$ curl https://packagecloud.io/install/repositories/classmethod/rpm/script.rpm | sudo bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1527 0 1527 0 0 1367 0 --:--:-- 0:00:01 --:--:-- 1368 Detected aws version 6... Downloading repository file: https://packagecloud.io/classmethod/rpm.repo?os=aws&dist=6 読み込んだプラグイン:priorities, update-motd, upgrade-helper パッケージ pygpgme-0.1-18.20090824bzr68.8.amzn1.x86_64 はインストール済みか最新バージョンです 何もしません % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 245 0 245 0 0 294 0 --:--:-- --:--:-- --:--:-- 294 読み込んだプラグイン:priorities, update-motd, upgrade-helper amzn-main/latest | 2.1 kB 00:00 amzn-updates/latest | 2.3 kB 00:00 classmethod_rpm/x86_64/signature | 836 B 00:00 https://packagecloud.io/gpg.key から鍵を取得中です。 Importing GPG key 0xD59097AB: Userid : "packagecloud ops (production key) <ops@packagecloud.io>" Fingerprint: 418a 7f2f b0e1 e6e7 eabf 6fe8 c2e7 3424 d590 97ab From : https://packagecloud.io/gpg.key classmethod_rpm/x86_64/signature | 951 B 00:00 ... classmethod_rpm/x86_64/filelists | 250 B 00:00 classmethod_rpm/x86_64/primary | 823 B 00:00 classmethod_rpm/x86_64/other | 217 B 00:00 classmethod_rpm 1/1 classmethod_rpm 1/1 classmethod_rpm 1/1 メタデータのキャッシュを作成しました [ec2-user@ip-XX-XX-XX-XX ~]$ cat /etc/yum.repos.d/ amzn-main.repo amzn-preview.repo classmethod_rpm.repo epel.repo amzn-nosrc.repo amzn-updates.repo epel-testing.repo [ec2-user@ip-XX-XX-XX-XX ~]$ cat /etc/yum.repos.d/classmethod_rpm.repo [classmethod_rpm] name=classmethod_rpm baseurl=https://packagecloud.io/classmethod/rpm/el/6/$basearch repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt assumeyes=1 [ec2-user@ip-XX-XX-XX-XX ~]$
yumのリストファイルに、https://packagecloud.io/classmethod/rpm/以下が登録されていることが確認できますね。それでは実際にアップロードしたRPMパッケージをyumコマンドでインストールしてみます。
[ec2-user@ip-XX-XX-XX-XX ~]$ sudo yum install ec2-swap 読み込んだプラグイン:priorities, update-motd, upgrade-helper 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ ec2-swap.noarch 0:0.2.0-1 を インストール --> 依存性解決を終了しました。 依存性を解決しました ============================================================================================================================ Package アーキテクチャー バージョン リポジトリー 容量 ============================================================================================================================ インストール中: ec2-swap noarch 0.2.0-1 classmethod_rpm 3.3 k トランザクションの要約 ============================================================================================================================ インストール 1 パッケージ 総ダウンロード容量: 3.3 k インストール容量: 3.1 k Is this ok [y/d/N]: y Downloading packages: ec2-swap-0.2.0-1.noarch.rpm | 3.3 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction インストール中 : ec2-swap-0.2.0-1.noarch 1/1 検証中 : ec2-swap-0.2.0-1.noarch 1/1 インストール: ec2-swap.noarch 0:0.2.0-1 完了しました! [ec2-user@ip-XX-XX-XX-XX ~]$
インストールできました!
まとめ
いかがでしたでしょうか。パッケージのリポジトリというと大掛かりな仕掛けという印象でしたが、packagecloud.ioを使えば手軽にリポジトリを作ることでソフトウェアの配布をより身近に感じていただけるのではないかと思います。packagecloud.ioを活用して、OSSソフトウェア開発の世界を広げて行きましょう!